Il protocollo ARP (Address Resolution Protocol) è un protocollo di livello 2/3 del modello OSI utilizzato per risolvere indirizzi IP in indirizzi MAC all’interno di una rete locale (LAN). Definito nell’RFC 826 del 1982, ARP è fondamentale per il funzionamento delle reti Ethernet/IP.
ARP permette di scoprire l’indirizzo MAC (hardware) di un dispositivo conoscendone l’indirizzo IP (logico), rendendo possibile la comunicazione a livello Data Link.
Quando parliamo di incapsulamento, ci riferiamo a un meccanismo fondamentale nelle reti a strati: ogni livello del modello OSI “avvolge” i dati del livello superiore aggiungendo le proprie informazioni di controllo. È come inserire una lettera in una busta: la lettera (dati di livello superiore) viene inserita nella busta (intestazione di livello inferiore) per essere spedita.
Il protocollo ARP ha una caratteristica particolare: opera tra il livello 2 (Data Link) e il livello 3 (Network) del modello OSI. Non è un protocollo puramente di livello 3 come IP, né puramente di livello 2 come Ethernet. La sua funzione è proprio quella di “collegare” questi due livelli, traducendo indirizzi logici (IP) in indirizzi fisici (MAC).
Quando un dispositivo deve inviare un messaggio ARP, il pacchetto ARP viene inserito come payload (carico utile) all’interno di una trama Ethernet. Vediamo come:
Il risultato è una struttura “a scatole cinesi”:
┌───────────────────────────────────────────────────────────────┐
│ TRAMA ETHERNET │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Header Ethernet (14 byte) │ │
│ │ • MAC Destinazione (6 byte) │ │
│ │ • MAC Sorgente (6 byte) │ │
│ │ • EtherType = 0x0806 (2 byte) ← indica che segue ARP │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ PACCHETTO ARP (28 byte) │ │
│ │ • Hardware Type │ │
│ │ • Protocol Type │ │
│ │ • Lunghezze indirizzi │ │
│ │ • Operation (Request/Reply) │ │
│ │ • Sender MAC e IP │ │
│ │ • Target MAC e IP │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Padding (se necessario, fino a 18 byte) │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ FCS - Frame Check Sequence (4 byte) │ │
│ │ (controllo errori calcolato su tutta la trama) │ │
│ └───────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────┘
+------------------+------------------+----------+----------+-----+
| MAC Destinazione | MAC Sorgente | EtherType| Payload | FCS |
| (6 byte) | (6 byte) | (2 byte) | (28 byte)| 4 B |
+------------------+------------------+----------+----------+-----+
| 0x0806 |
| ARP |
+----------+
Il campo EtherType nell’intestazione Ethernet è cruciale per l’incapsulamento. Questo campo di 2 byte comunica al ricevente che tipo di dati sono contenuti nel payload della trama.
Valori comuni di EtherType:
0x0800 → Il payload contiene un pacchetto IPv40x0806 → Il payload contiene un pacchetto ARP0x86DD → Il payload contiene un pacchetto IPv60x8100 → La trama contiene un VLAN tagQuando una scheda di rete riceve una trama Ethernet, la prima cosa che fa è leggere il campo EtherType. Se legge 0x0806, “sa” che deve passare i dati al gestore del protocollo ARP e non, ad esempio, allo stack TCP/IP.
Questa organizzazione a livelli permette:
Separazione delle responsabilità: Ethernet si occupa solo di trasportare la trama da un MAC all’altro sulla rete locale, mentre ARP si occupa della risoluzione degli indirizzi
Flessibilità: La stessa infrastruttura Ethernet può trasportare diversi protocolli (IP, ARP, IPv6, etc.) semplicemente cambiando l’EtherType
Modularità: Possiamo cambiare il protocollo di livello superiore (es. passare da IPv4 a IPv6) senza dover modificare Ethernet
Immaginiamo che il computer con IP 192.168.1.100 voglia scoprire il MAC del router 192.168.1.1:
Passo 1 - Creazione del pacchetto ARP:
Il sistema operativo crea un pacchetto ARP Request di 28 byte:
- Operation: 1 (Request)
- Sender IP: 192.168.1.100
- Sender MAC: 00:11:22:33:44:55
- Target IP: 192.168.1.1
- Target MAC: 00:00:00:00:00:00 (sconosciuto!)
Passo 2 - Incapsulamento in Ethernet:
Il driver della scheda di rete "avvolge" il pacchetto ARP in una trama Ethernet:
- MAC Destinazione: FF:FF:FF:FF:FF:FF (broadcast - tutti devono riceverlo!)
- MAC Sorgente: 00:11:22:33:44:55 (il nostro MAC)
- EtherType: 0x0806 (dice: "questo è ARP")
- Payload: [il pacchetto ARP di 28 byte creato prima]
- FCS: [calcolato automaticamente dall'hardware]
Passo 3 - Trasmissione:
La scheda di rete aggiunge il preambolo e trasmette la trama sul cavo.
Tutte le schede di rete sulla stessa LAN riceveranno la trama.
Passo 4 - Ricezione e De-incapsulamento:
Ogni scheda di rete:
1. Riceve la trama
2. Controlla il MAC destinazione (FF:FF:FF:FF:FF:FF → è per tutti!)
3. Legge l'EtherType (0x0806 → è un pacchetto ARP)
4. "Estrae" il pacchetto ARP di 28 byte dal payload
5. Lo passa al software che gestisce ARP
6. Solo il dispositivo con IP 192.168.1.1 risponderà
È importante comprendere la terminologia:
Quando diciamo “il pacchetto ARP viene incapsulato nella trama Ethernet”, significa esattamente questo: il pacchetto diventa parte del contenuto (payload) della trama.
| Campo | Dimensione | Descrizione |
|---|---|---|
| MAC Destinazione | 6 byte | FF:FF:FF:FF:FF:FF per ARP Request (broadcast)<br>MAC specifico per ARP Reply |
| MAC Sorgente | 6 byte | Indirizzo MAC del mittente |
| EtherType | 2 byte | 0x0806 identifica il protocollo ARP |
| Payload ARP | 28 byte | Dati del protocollo ARP |
| FCS | 4 byte | Frame Check Sequence (controllo errori) |
Il payload ARP ha una dimensione fissa di 28 byte ed è composto dai seguenti campi:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Hardware Type | Protocol Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| HW Addr Len | Proto Addr Len| Operation |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sender Hardware Address |
| (6 byte) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sender Protocol Address |
| (4 byte) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target Hardware Address |
| (6 byte) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target Protocol Address |
| (4 byte) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Offset: 0-1 | Dimensione: 16 bit
Identifica il tipo di indirizzo hardware utilizzato.
| Valore | Tipo | Descrizione |
|---|---|---|
0x0001 |
Ethernet | Rete Ethernet (il più comune) |
0x0006 |
IEEE 802 | Reti token ring |
0x0007 |
ARCnet | Architettura ARCnet |
0x000F |
Frame Relay | Reti Frame Relay |
Valore tipico: 0x0001 (Ethernet)
Offset: 2-3 | Dimensione: 16 bit
Identifica il tipo di protocollo di livello 3 per cui si richiede la risoluzione.
| Valore | Protocollo |
|---|---|
0x0800 |
IPv4 (il più comune) |
0x86DD |
IPv6 |
Valore tipico: 0x0800 (IPv4)
Offset: 4 | Dimensione: 8 bit
Specifica la lunghezza in byte dell’indirizzo hardware.
Valore per Ethernet: 6 (indirizzo MAC a 48 bit)
Offset: 5 | Dimensione: 8 bit
Specifica la lunghezza in byte dell’indirizzo di protocollo.
Valore per IPv4: 4 (indirizzo IP a 32 bit)
Offset: 6-7 | Dimensione: 16 bit
Specifica il tipo di operazione ARP.
| Valore | Tipo | Descrizione |
|---|---|---|
0x0001 |
ARP Request | Richiesta di risoluzione indirizzo |
0x0002 |
ARP Reply | Risposta con indirizzo MAC |
0x0003 |
RARP Request | Reverse ARP - richiesta IP da MAC |
0x0004 |
RARP Reply | Reverse ARP - risposta |
0x0008 |
InARP Request | Inverse ARP request |
0x0009 |
InARP Reply | Inverse ARP reply |
Valori più comuni: 1 (Request) e 2 (Reply)
Offset: 8-13 | Dimensione: 48 bit
Indirizzo MAC del dispositivo mittente.
Formato: XX:XX:XX:XX:XX:XX (notazione esadecimale)
Esempio: 00:1A:2B:3C:4D:5E
Offset: 14-17 | Dimensione: 32 bit
Indirizzo IP del dispositivo mittente.
Formato: Indirizzo IPv4 in notazione decimale puntata
Esempio: 192.168.1.100 → C0.A8.01.64 (hex)
Offset: 18-23 | Dimensione: 48 bit
Indirizzo MAC del dispositivo destinatario.
Nel caso di ARP Request:
00:00:00:00:00:00 (sconosciuto, è proprio questo che si vuole scoprire!)Nel caso di ARP Reply:
Offset: 24-27 | Dimensione: 32 bit
Indirizzo IP del dispositivo destinatario di cui si vuole conoscere il MAC.
Esempio: 192.168.1.1
| Campo | Offset | Dimensione | Valore Tipico | Descrizione |
|---|---|---|---|---|
| Hardware Type | 0-1 | 2 byte | 0x0001 |
Ethernet |
| Protocol Type | 2-3 | 2 byte | 0x0800 |
IPv4 |
| HW Address Length | 4 | 1 byte | 6 |
Lunghezza MAC |
| Protocol Address Length | 5 | 1 byte | 4 |
Lunghezza IP |
| Operation | 6-7 | 2 byte | 1 o 2 |
Request/Reply |
| Sender HW Address | 8-13 | 6 byte | MAC mittente | Es: 00:1A:2B:3C:4D:5E |
| Sender Protocol Address | 14-17 | 4 byte | IP mittente | Es: 192.168.1.100 |
| Target HW Address | 18-23 | 6 byte | 00:00:00:00:00:00 (Request) |
MAC destinatario |
| Target Protocol Address | 24-27 | 4 byte | IP destinatario | Es: 192.168.1.1 |
Dimensione totale payload ARP: 28 byte
Il computer 192.168.1.100 (MAC: 00:11:22:33:44:55) vuole comunicare con il router 192.168.1.1 ma non conosce il suo indirizzo MAC.
TRAMA ETHERNET (14 byte header + 28 byte payload + 4 byte FCS = 46 byte)
┌─────────────────────────────────────────────────────────────┐
│ ETHERNET HEADER │
├─────────────────────────────────────────────────────────────┤
│ MAC Destinazione: FF:FF:FF:FF:FF:FF (Broadcast) │
│ MAC Sorgente: 00:11:22:33:44:55 │
│ EtherType: 0x0806 (ARP) │
├─────────────────────────────────────────────────────────────┤
│ ARP PAYLOAD │
├─────────────────────────────────────────────────────────────┤
│ Hardware Type: 0x0001 (Ethernet) │
│ Protocol Type: 0x0800 (IPv4) │
│ HW Addr Length: 0x06 (6 byte) │
│ Proto Addr Length: 0x04 (4 byte) │
│ Operation: 0x0001 (Request) │
│ Sender MAC: 00:11:22:33:44:55 │
│ Sender IP: 192.168.1.100 │
│ Target MAC: 00:00:00:00:00:00 (sconosciuto) │
│ Target IP: 192.168.1.1 │
└─────────────────────────────────────────────────────────────┘
Offset Hex ASCII
------ ----------------------------------------------- ----------------
0000 FF FF FF FF FF FF 00 11 22 33 44 55 08 06 ........"3DU..
↑ MAC Sorgente ↑ EtherType
0010 00 01 08 00 06 04 00 01 00 11 22 33 44 55 ..........."3DU
↑HType ↑PType ↑L ↑L ↑Op ↑ Sender MAC
0020 C0 A8 01 64 00 00 00 00 00 00 C0 A8 01 01 ...d..........
↑Sender IP ↑ Target MAC ↑Target IP
Il router 192.168.1.1 (MAC: AA:BB:CC:DD:EE:FF) risponde alla richiesta.
TRAMA ETHERNET
┌─────────────────────────────────────────────────────────────┐
│ ETHERNET HEADER │
├─────────────────────────────────────────────────────────────┤
│ MAC Destinazione: 00:11:22:33:44:55 (Unicast al PC) │
│ MAC Sorgente: AA:BB:CC:DD:EE:FF (Router) │
│ EtherType: 0x0806 (ARP) │
├─────────────────────────────────────────────────────────────┤
│ ARP PAYLOAD │
├─────────────────────────────────────────────────────────────┤
│ Hardware Type: 0x0001 (Ethernet) │
│ Protocol Type: 0x0800 (IPv4) │
│ HW Addr Length: 0x06 (6 byte) │
│ Proto Addr Length: 0x04 (4 byte) │
│ Operation: 0x0002 (Reply) │
│ Sender MAC: AA:BB:CC:DD:EE:FF (Router) │
│ Sender IP: 192.168.1.1 │
│ Target MAC: 00:11:22:33:44:55 (PC richiedente) │
│ Target IP: 192.168.1.100 │
└─────────────────────────────────────────────────────────────┘
| Campo | ARP Request | ARP Reply |
|---|---|---|
| Ethernet Dest MAC | FF:FF:FF:FF:FF:FF (broadcast) |
00:11:22:33:44:55 (unicast) |
| Ethernet Src MAC | 00:11:22:33:44:55 (PC) |
AA:BB:CC:DD:EE:FF (Router) |
| Operation | 0x0001 (Request) |
0x0002 (Reply) |
| Sender MAC | 00:11:22:33:44:55 (PC) |
AA:BB:CC:DD:EE:FF (Router) |
| Sender IP | 192.168.1.100 (PC) |
192.168.1.1 (Router) |
| Target MAC | 00:00:00:00:00:00 |
00:11:22:33:44:55 (PC) |
| Target IP | 192.168.1.1 (Router) |
192.168.1.100 (PC) |
Trama Ethernet completa:
┌────────────────┬──────────┐
│ Preambolo │ 8 byte │ (non trasmesso in catture software)
│ MAC Dest │ 6 byte │
│ MAC Src │ 6 byte │
│ EtherType │ 2 byte │
│ Payload ARP │ 28 byte │
│ Padding │ 18 byte │ (se necessario per min 64 byte)
│ FCS │ 4 byte │
└────────────────┴──────────┘
Uno degli aspetti fondamentali dello standard Ethernet IEEE 802.3 è che ogni trama deve avere una dimensione minima di 64 byte (escluso il preambolo e il SFD - Start Frame Delimiter). Questa non è una scelta arbitraria, ma deriva da precise necessità tecniche legate al funzionamento del protocollo CSMA/CD (Carrier Sense Multiple Access with Collision Detection).
La dimensione minima di 64 byte è stata stabilita per garantire il corretto funzionamento dell’algoritmo di rilevamento delle collisioni nelle reti Ethernet classiche (10BASE-T, 100BASE-T in half-duplex).
Il problema delle collisioni:
Nelle reti Ethernet half-duplex, quando due dispositivi trasmettono simultaneamente, si verifica una collisione. Il meccanismo CSMA/CD richiede che il dispositivo trasmittente sia ancora in trasmissione quando il segnale di collisione torna indietro dal punto più lontano della rete.
Il calcolo:
Consideriamo una rete Ethernet 10BASE-T con la massima estensione consentita:
A 10 Mbps:
Per sicurezza, lo standard ha raddoppiato questo valore e arrotondato, arrivando a 64 byte come dimensione minima. Questo garantisce che anche in scenari peggiori (massima distanza, collisione tardiva), il trasmittente rilevi sempre la collisione prima di terminare la trasmissione.
La trama di 64 byte si compone in questo modo:
┌─────────────────────────────────────────────────────┐
│ TRAMA ETHERNET MINIMA = 64 byte │
├─────────────────────────────────────────────────────┤
│ │
│ Header Ethernet: 14 byte │
│ • MAC Destinazione: 6 byte │
│ • MAC Sorgente: 6 byte │
│ • EtherType/Length: 2 byte │
│ │
│ Payload (dati utili): 46-1500 byte │
│ • Minimo: 46 byte │
│ • Massimo: 1500 byte (MTU) │
│ │
│ FCS (Frame Check Seq.): 4 byte │
│ │
└─────────────────────────────────────────────────────┘
Totale minimo: 14 + 46 + 4 = 64 byte
Nota importante: Il preambolo (7 byte) e l’SFD (1 byte) vengono aggiunti a livello fisico e non sono conteggiati nei 64 byte. La trama completa trasmessa sul cavo è quindi di almeno 72 byte.
Quando il payload effettivo è inferiore a 46 byte, viene automaticamente aggiunto del padding (riempimento) per raggiungere la dimensione minima richiesta.
Cos’è il padding?
Il padding consiste in byte di riempimento (solitamente zeri, ma non necessariamente) aggiunti alla fine del payload per portare la trama alla dimensione minima di 64 byte totali.
Formula del padding:
Padding necessario = 46 - dimensione_payload_effettivo
Se (Header + Payload + FCS) < 64 byte:
Padding = 46 - dimensione_payload
Altrimenti:
Padding = 0
Analizziamo passo per passo una trama contenente un pacchetto ARP:
Passo 1 - Dimensioni dei componenti:
Header Ethernet: 14 byte
├─ MAC Dest: 6 byte
├─ MAC Source: 6 byte
└─ EtherType: 2 byte (0x0806 per ARP)
Payload ARP: 28 byte
├─ Hardware Type: 2 byte
├─ Protocol Type: 2 byte
├─ HW Addr Len: 1 byte
├─ Proto Addr Len: 1 byte
├─ Operation: 2 byte
├─ Sender MAC: 6 byte
├─ Sender IP: 4 byte
├─ Target MAC: 6 byte
└─ Target IP: 4 byte
FCS: 4 byte
Passo 2 - Somma senza padding:
14 (Header) + 28 (ARP) + 4 (FCS) = 46 byte
46 byte < 64 byte → È necessario il padding!
Passo 3 - Calcolo del padding necessario:
Payload minimo richiesto = 46 byte
Payload effettivo (ARP) = 28 byte
Padding = 46 - 28 = 18 byte
Passo 4 - Trama finale:
┌──────────────────────────────────────────────────┐
│ Header Ethernet: 14 byte │
├──────────────────────────────────────────────────┤
│ Payload ARP: 28 byte │
├──────────────────────────────────────────────────┤
│ PADDING (zeri): 18 byte ← Aggiunto! │
├──────────────────────────────────────────────────┤
│ FCS: 4 byte │
└──────────────────────────────────────────────────┘
Totale: 14 + 28 + 18 + 4 = 64 byte ✓
Ecco come appare una trama ARP reale con il padding:
Offset Hex Data ASCII
------ ----------------------------------------------- ----------------
0000 FF FF FF FF FF FF 00 11 22 33 44 55 08 06 ........"3DU..
└─ MAC Dest ─┘ └─ MAC Src ──┘ └EType┘
0010 00 01 08 00 06 04 00 01 00 11 22 33 44 55 ..........."3DU
└HT─┘ └PT─┘ HL PL └Op┘ └─ Sender MAC ──┘
0020 C0 A8 01 64 00 00 00 00 00 00 C0 A8 01 01 ...d..........
└Sender IP┘ └─ Target MAC ──┘ └Target IP┘
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..............
└──────────── PADDING (18 byte) ─────────────
0040 00 00 00 00 XX XX XX XX ........
─────┘ └─── FCS ──┘
I byte da offset 0x002C a 0x003D (18 byte) sono il padding aggiunto automaticamente.
Il padding viene aggiunto automaticamente dall’hardware della scheda di rete (NIC - Network Interface Card) prima della trasmissione. Il software (driver, sistema operativo) non deve preoccuparsi di questo dettaglio.
Processo:
Mentre esiste un minimo, esiste anche un massimo:
Trama Ethernet standard (senza VLAN tag):
┌─────────────────────────────────────────┐
│ Header: 14 byte │
│ Payload MAX: 1500 byte (MTU) │
│ FCS: 4 byte │
└─────────────────────────────────────────┘
Totale MAX: 1518 byte
MTU (Maximum Transmission Unit) = 1500 byte
Questa è la quantità massima di dati che può essere trasportata in una singola trama Ethernet standard. Pacchetti IP più grandi devono essere frammentati.
Jumbo Frames:
Alcune reti supportano “Jumbo Frames” con MTU fino a 9000 byte, utilizzate in ambienti che richiedono alte prestazioni (data center, storage network).
| Componente | Minimo | Standard | Massimo | Note |
|---|---|---|---|---|
| Preambolo + SFD | 8 byte | 8 byte | 8 byte | Non conteggiato nei 64 byte |
| Header Ethernet | 14 byte | 14 byte | 14 byte | Fisso (senza VLAN) |
| Payload | 46 byte | variabile | 1500 byte | Include eventuale padding |
| FCS | 4 byte | 4 byte | 4 byte | Fisso |
| Trama totale | 64 byte | variabile | 1518 byte | Senza preambolo |
| Sul cavo | 72 byte | variabile | 1526 byte | Con preambolo |
1. Efficienza di banda:
Per dati molto piccoli, il padding rappresenta uno spreco. Ad esempio, un ping ICMP con 1 byte di dati:
Header IP: 20 byte
Header ICMP: 8 byte
Dati: 1 byte
─────────────────────
Payload totale: 29 byte
Con header Ethernet (14 byte) e FCS (4 byte):
14 + 29 + 4 = 47 byte → servono 17 byte di padding!
Efficienza: 1 byte utile su 64 byte totali = 1.56%
2. Sicurezza:
Il padding potrebbe contenere residui di memoria precedente. Alcuni sistemi azzerano esplicitamente il padding per evitare information leakage.
3. Rilevamento del padding:
Il ricevente deve sapere dove finiscono i dati reali e inizia il padding. Questo è gestito dai protocolli di livello superiore (es. IP ha un campo “Total Length”).
Nelle reti moderne full-duplex (commutate con switch), non ci sono collisioni perché i canali di trasmissione e ricezione sono separati. Tecnicamente, il limite minimo di 64 byte non sarebbe necessario per ragioni di CSMA/CD.
Tuttavia, lo standard mantiene il limite per:
✓ La dimensione minima di 64 byte deriva da requisiti tecnici del CSMA/CD
✓ Il padding viene aggiunto automaticamente dall’hardware quando necessario
✓ Per ARP servono 18 byte di padding (28 byte dati + 18 padding = 46 byte payload)
✓ Il preambolo (8 byte) non è conteggiato nei 64 byte
✓ La dimensione massima standard è 1518 byte (MTU 1500 + 14 header + 4 FCS)
✓ Nelle reti moderne il limite persiste per compatibilità e standardizzazione
Un dispositivo invia un ARP Request per il proprio indirizzo IP.
Scopi:
Caratteristiche:
00:00:00:00:00:00FF:FF:FF:FF:FF:FF (broadcast)Verifica se un indirizzo IP è già in uso prima di configurarlo.
Caratteristiche:
0.0.0.0Annuncio dell’associazione IP-MAC appena configurata.
Caratteristiche:
I dispositivi mantengono una tabella ARP (ARP cache) per evitare continue richieste.
| Indirizzo IP | Indirizzo MAC | Tipo | TTL |
|---|---|---|---|
| 192.168.1.1 | AA:BB:CC:DD:EE:FF | Dinamico | 120s |
| 192.168.1.50 | 11:22:33:44:55:66 | Dinamico | 45s |
| 192.168.1.254 | FF:EE:DD:CC:BB:AA | Statico | ∞ |
Windows:
arp -a
Linux/macOS:
arp -n
# oppure
ip neigh show
Un attaccante invia ARP Reply falsi per:
Esempio di attacco:
Attaccante invia:
- ARP Reply a PC: "192.168.1.1 è a MAC_ATTACCANTE"
- ARP Reply a Router: "192.168.1.100 è a MAC_ATTACCANTE"
Risultato: tutto il traffico passa per l'attaccante
Dato il seguente dump esadecimale, identifica tutti i campi ARP:
FF FF FF FF FF FF 00 50 56 C0 00 08 08 06 00 01
08 00 06 04 00 01 00 50 56 C0 00 08 C0 A8 01 0A
00 00 00 00 00 00 C0 A8 01 01
Calcola la dimensione totale di una trama Ethernet contenente un pacchetto ARP, includendo il padding necessario.
Spiega perché in un ARP Request il campo “Target Hardware Address” è impostato a 00:00:00:00:00:00.
Descrivi il flusso completo di un’operazione ARP quando un host A (192.168.1.10) vuole comunicare con l’host B (192.168.1.20) che non è presente nella sua ARP cache.
Il protocollo ARP, nonostante la sua semplicità e i suoi limiti di sicurezza, rimane fondamentale per il funzionamento delle reti Ethernet/IP moderne. La comprensione dettagliata della struttura delle sue trame è essenziale per:
La transizione verso IPv6 e il protocollo NDP rappresenta l’evoluzione naturale, ma ARP continuerà a essere rilevante nelle reti IPv4 per molti anni a venire.